/**
 * @file terrain.h
 * Definit les caracteristiques des terrains.
 */
#ifndef _TERRAIN_H
#define _TERRAIN_H
#include <iostream>
using namespace std;

/**
* @struct Terrain
*/
struct Terrain
{
	int dimx;   ///@param x entier dimension en x de la largeur totale du terrain (donc peut être superieure au dimensions d'affichage)
	int dimy;   ///@param y entier pareil que pour dimx mais en y
	char ter[38][29]; ///ter tableau de 38*29 parce que correspondance avec l'écran affiché imaginer sur une résolution d'écran de type eeepc (800*480px)
};

/**
@brief crée le terrain à partir d'un fichier (DU fichier)
@param FILE* f
@return pointeur sur Terrain
*/
Terrain* creerTerrain(FILE* f);

/**
@brief supprime le terrain
@param Terrain* ter
@return none
*/
void supprimeTerrain(Terrain* ter);

/**
@brief affiche le terrain
@param Terrain* ter
@return none
*/
void afficheTerrain(Terrain* ter);

/**
@brief initialise le terrain
@param Terrain* p, entier niv
@return none
*/
void terInit(Terrain* p, int niv);

/**
@brief permet au Hero ou pas d'aller là où le joueur veut
@param Terrain* constante t, entiers constantes x y
@return entier
*/
int terPosHeroOk(const Terrain* t, const int x, const int y);

/**
@brief recupère la position du Hero
@param Terrain* constante ter, entiers constantes x y
@return caractère
*/
char terGetXY(const Terrain* ter, const int x, const int y);

/**
@brief recupère la dimension en x du terrain
@param Terrain* constante t
@return entier
*/
int terrainGetDimX(const Terrain* t);

/**
@brief recupère la dimension en y du terrain
@param Terrain* constante t
@return entier
*/
int terrainGetDimY(const Terrain* t);

/**
@brief recupère le caractère du terrain a la coordonnée (x,y)
@param Terrain* constante t, entiers x y
@return caractère
*/
char terrainGetTer(const Terrain* t,int x,int y);

/**
@brief change la dimension en x du terrain
@param Terrain* t, entier x
@return none
*/
void terrainSetDimx(Terrain* t,int x);

/**
@brief change la dimension en y du terrain
@param Terrain*t, entier y
@return none
*/
void terrainSetDimy(Terrain* t,int y);

/**
@brief change le caractère du terrain en position (x,y)
@param Terrain* t, entiers x y, caractère c
@return none
*/
void terrainSetTer(Terrain* t,int x,int y,char c);

/**
@brief cherche le debut du terrain
@param Terrain* ter, pointeurs sur entier x y
@return none
*/
void RechercheDebutTerrain(Terrain* ter,int* x,int* y);


#endif
